import { defineStore } from 'pinia'
import { lStorage } from '@/utils/storage'
import Cookies from 'js-cookie'

export const useUserStore = defineStore('user', {
  state: () => ({
    token: '' as string, // 用户登录令牌
    userInfo: {} as Record<string, any>, // 用户信息
  }),

  actions: {
    // 设置 token
    setToken(token: string) {
      this.token = token
      lStorage.set('WXAI_USER_TOKEN', token) // 更新缓存
      Cookies.set('WXAI_USER_TOKEN', token, {
        expires: 7,
      }) // 更新 Cookies
    },

    // 设置用户信息
    setUserInfo(userInfo: Record<string, any>) {
      this.userInfo = userInfo
      lStorage.set('WXAI_USER_INFO', userInfo) // 更新缓存
      Cookies.set('WXAI_USER_INFO', JSON.stringify(userInfo), {
        expires: 7,
      }) // 更新 Cookies
    },

    // 清空用户数据
    clearUserData() {
      this.token = ''
      this.userInfo = {}
      lStorage.remove('WXAI_USER_TOKEN')
      lStorage.remove('WXAI_USER_INFO')
      Cookies.remove('WXAI_USER_TOKEN')
      Cookies.remove('WXAI_USER_INFO')
    },

    // 初始化用户数据
    initializeUserData() {
      // 从 localStorage 和 Cookies 中尝试获取 token
      const localToken = lStorage.get('WXAI_USER_TOKEN') || ''
      const cookieToken = Cookies.get('WXAI_USER_TOKEN') || ''

      // 优先使用存在的 token，互相补充
      this.token = localToken || cookieToken
      if (!localToken && cookieToken) {
        lStorage.set('WXAI_USER_TOKEN', cookieToken) // 如果 localStorage 缺失，从 Cookies 恢复
      }
      if (!cookieToken && localToken) {
        Cookies.set('WXAI_USER_TOKEN', localToken, {
          expires: 7,
        }) // 如果 Cookies 缺失，从 localStorage 恢复
      }

      // 从 localStorage 和 Cookies 中尝试获取用户信息
      const localUserInfo = lStorage.get('WXAI_USER_INFO') || {}
      const cookieUserInfo = Cookies.get('WXAI_USER_INFO')
        ? JSON.parse(Cookies.get('WXAI_USER_INFO') || '{}')
        : {}

      // 优先使用存在的用户信息，互相补充
      this.userInfo = Object.keys(localUserInfo).length
        ? localUserInfo
        : cookieUserInfo
      if (
        !Object.keys(localUserInfo).length &&
        Object.keys(cookieUserInfo).length
      ) {
        lStorage.set('WXAI_USER_INFO', cookieUserInfo) // 如果 localStorage 缺失，从 Cookies 恢复
      }
      if (
        !Object.keys(cookieUserInfo).length &&
        Object.keys(localUserInfo).length
      ) {
        Cookies.set('WXAI_USER_INFO', JSON.stringify(localUserInfo), {
          expires: 7,
        }) // 如果 Cookies 缺失，从 localStorage 恢复
      }
    },
  },
})
